/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package beans;

import base.ListaDetalhe;
import daos.UsuarioDAO;
import entidades.Usuario;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import javax.faces.model.SelectItem;
import negocio.FabricaNegocio;
import negocio.NegocioException;
import seguranca.Interfaces.IUsuario;
import utilitarios.Bean;

/**
 *
 * @author renan
 */
public class UsuarioFrm extends ListaDetalhe<IUsuario> {

    private final String MENU = "menu";
    private final String DETALHE = "usuarioDetalhe";
    private final String LISTA = "usuario";
    private final String LISTAQUARTOS = "listaQuartos";
    private SelectItem[] nivel;
    private SelectItem[] situacao;
    IUsuario usuario;
    private String login;
    private String nivelSelecionado;
    private String situacaoSelecionada;

    public UsuarioFrm() {
        usuario = FabricaNegocio.getUsuario();
        situacao = new SelectItem[]{
                    new SelectItem("", ""),
                    new SelectItem("1", "ATIVO"),
                    new SelectItem("2", "INATIVO")
                };
        nivel = new SelectItem[]{
                    new SelectItem("", ""),
                    new SelectItem("1", "ADMINISTRADOR"),
                    new SelectItem("2", "GERENTE"),
                    new SelectItem("3", "CLIENTE"),};
        entrar();
    }

    public String autenticar() {
        try {
            usuario.autenticar();
            limpar();
            return MENU;
        } catch (NegocioException ex) {
            imprimirErrosPagina(ex);
        }
        return null;
    }

    public String autenticarCliente() {
        try {
            usuario.autenticarCliente();
            limpar();
            return LISTAQUARTOS;
        } catch (NegocioException ex) {
            imprimirErrosPagina(ex);
        }
        return null;
    }

    public void pesquisar() {
        List<Usuario> col;
        colecao.clear();
        try {
            col = usuario.pesquisar(login);
            for (int i = 0; i < col.size(); i++) {
                UsuarioDAO d = new UsuarioDAO();
                d.setUsuario(col.get(i));
                colecao.add(d);
            }
        } catch (NegocioException ex) {
            imprimirErrosPagina(ex);
        }

    }

    public String cadastrar() {
        acao = Acao.INSERIR;
        usuario.limpar();
        return DETALHE;
    }

    public void gravar() {
        try {
            if (acao == Acao.INSERIR) {
                usuario.inserir();
            } else if (acao == Acao.ALTERAR) {
                usuario.alterar();
            }
            limpar();
        } catch (NegocioException ex) {
            imprimirErrosPagina(ex);
        }
    }

    public String alterar() {
        acao = Acao.ALTERAR;
        IUsuario item = (IUsuario) getObjetoRequest("item");
        Bean.copiarPropriedades(usuario, item);
        return DETALHE;
    }

    public void remover() {
        IUsuario item = (IUsuario) getObjetoRequest("item");
        Bean.copiarPropriedades(usuario, item);
        try {
            usuario.deletar();
            colecao.remove(item);
            usuario.limpar();
        } catch (NegocioException e) {
            imprimirErrosPagina(e);
        }

    }

    private void limpar() {
        colecao.clear();
        usuario.limpar();
        login = "";
    }

    public void entrar() {
        limpar();
    }

    public String fechar() {
        return LISTA;
    }

    public void sort(final String column, final boolean order) {
        Comparator<IUsuario> comparator = new Comparator<IUsuario>() {

            public int compare(IUsuario d1, IUsuario d2) {
                if (column == null) {
                    return 0;
                }
                if (column.equals("nome")) {
                    return order ? d1.getUsuario().getNome().compareTo(d2.getUsuario().getNome())
                            : d2.getUsuario().getNome().compareTo(d1.getUsuario().getNome());
                } else if (column.equals("login")) {
                    return order ? d1.getUsuario().getLogin().compareTo(d2.getUsuario().getLogin())
                            : d2.getUsuario().getLogin().compareTo(d1.getUsuario().getLogin());
                } else if (column.equals("nivel")) {
                    return order ? d1.getUsuario().getNivel().compareTo(d2.getUsuario().getNivel())
                            : d2.getUsuario().getNivel().compareTo(d1.getUsuario().getNivel());
                } else if (column.equals("situacao")) {
                    return order ? d1.getUsuario().getSituacao().compareTo(d2.getUsuario().getSituacao())
                            : d2.getUsuario().getSituacao().compareTo(d1.getUsuario().getSituacao());

                } else {
                    return 0;
                }
            }
        };
        Collections.sort(colecao, comparator);
    }

    public IUsuario getUsuario() {
        return usuario;
    }

    public void setUsuario(IUsuario usuario) {
        this.usuario = usuario;
    }

    public String getLogin() {
        return login;
    }

    public void setLogin(String login) {
        this.login = login;
    }

    public SelectItem[] getNivel() {
        return nivel;
    }

    public void setNivel(SelectItem[] nivel) {
        this.nivel = nivel;
    }

    public SelectItem[] getSituacao() {
        return situacao;
    }

    public void setSituacao(SelectItem[] situacao) {
        this.situacao = situacao;
    }

    public String getNivelSelecionado() {
        return nivelSelecionado;
    }

    public void setNivelSelecionado(String nivelSelecionado) {
        this.nivelSelecionado = nivelSelecionado;
    }

    public String getSituacaoSelecionada() {
        return situacaoSelecionada;
    }

    public void setSituacaoSelecionada(String situacaoSelecionada) {
        this.situacaoSelecionada = situacaoSelecionada;
    }
}
